import router from './router/index'
import store from './store/index'

router.beforeEach(async(to, from, next) => {
//   获取vuex模块中变量的语法：store.state.模块名.变量名
  const token = store.state.user.token
  if (token) {
    // 已登录 --- 判断跳转的页面是否为登录页，是则跳转到首页否则放行
    if (to.path === '/login') {
      next('/')
    } else {
      if (!store.state.user.userInfo.id) {
        // 判断只有用户信息不存在的时候才需要重新调用函数获取用户信息
        await store.dispatch('user/getUserInfo')
        // 调用获取动态路由数据的函数
        // await store.dispatch('user/getUserPerm')
        const menus = store.state.user.UserPerm
        // console.log('menus', menus)
        const routes = await store.dispatch('permission/filterRoutes', menus)
        // console.log('routes', routes)
        router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
        // console.log('to', to.path)
        return next(to.path)
      }
      next()
    }
  } else {
    // 未登录 -- 404页面和登录页面 直接放行，否则跳转到登录页面
    const writeArr = ['/login', '/404', '/register'] // 添加白名单，所有在白名单中的路径都可以直接放行
    // 白名单的写法 更有利于扩展
    // indexOf方法：用于查找数组中是否存在某个元素并返回该元素对应在数组中的下标志，如果没有找到则返回-1
    if (writeArr.indexOf(to.path) !== -1) {
      next()
    } else {
      next('/login')
    }
  }
})
